package com.example.springboot.config.exception;

import org.springframework.ui.Model;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;


/**
 * 定义一个全局异常的处理类，需要使用
 *
 * @ExceptionHandler ：该注解作用对象为方法，并且在运行时有效，value()可以指定异常类。
 * 由该注解注释的方法可以具有灵活的输入参数
 * @ControllerAdvice：
 */
@ControllerAdvice
public class GlobalDefaultExceptionHandler {

	/**
	 * 处理 Exception 类型的异常
	 *
	 * @param e
	 * @return
	 */
	@ExceptionHandler(Exception.class)
	@ResponseBody
	public Map<String, Object> defaultExceptionHandler(Exception e) {

		//如果controller抛出异常，则返回500错误异常页面
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("code", 500);
		map.put("msg", e.getMessage());
		return map;
	}

	@ModelAttribute
	public void addAttrbuite(Model model) {
		model.addAttribute("message", "请求处理异常");
	}

	@InitBinder
	public void initBinder(WebDataBinder webDataBinder) {
		//过滤request请求中携带的name值
		webDataBinder.setDisallowedFields("name");
	}


}